package com.xigege.netty.inboundHandlerAndOutboundHandler.client;

import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.util.CharsetUtil;

import java.nio.charset.Charset;

public class MyClientHandler extends SimpleChannelInboundHandler<Long> {
    @Override
    protected void channelRead0(ChannelHandlerContext ctx, Long msg) throws Exception {
        System.out.println("服务器端的ip = " + ctx.channel().remoteAddress());
        System.out.println("收到服务器的信息 = " + msg);
    }

    //重写ChannelActive 发送数据
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        System.out.println("MyClientHandler 发送数据");
        //ctx.writeAndFlush(Unpooled.copiedBuffer());
        //ctx.writeAndFlush(123456L);  //发送一个Long

        //发送“abcdabcdabcdabcd”，服务器会如何接收+
        //发送此段字符串的时候，设置的编码器并没有对它进行编码
        //分析：
        //  1. abcdabcdabcdabcd是16个字节
        //  2. 该处理器的前一个handler是MyLongToByteEncoder
        //  3. MyLongToByteEncoder的父类是MessageToByteEncoder
        //  4. MessageToByteEncoder的write方法
        /*
        //判断当前msg 是不是应该被处理的类型
         if (acceptOutboundMessage(msg)) {
                @SuppressWarnings("unchecked")
                I cast = (I) msg;
                buf = allocateBuffer(ctx, cast, preferDirect);
                try {
                //如果是进行encode
                    encode(ctx, cast, buf);
                } finally {
                    ReferenceCountUtil.release(cast);
                }

                if (buf.isReadable()) {
                    ctx.write(buf, promise);
                } else {
                    buf.release();
                    ctx.write(Unpooled.EMPTY_BUFFER, promise);
                }
                buf = null;
            } else {
            //如果不是，就跳过，把msg给到下一个handler
                ctx.write(msg, promise);
            }
            //因此我们编写Encoder是要注意传入的数据类型和处理的数据类型一致
         */
        ctx.writeAndFlush(Unpooled.copiedBuffer("abcdabcdabcdabcd", CharsetUtil.UTF_8));
    }
}
